﻿using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using 餐饮_企划.Models;

using System.IO;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;



namespace 餐饮_企划.Controllers
{
    public class UserController : Controller
    {
        private readonly ILogger<UserController> _logger;
        UserDB userDB;     //扩大对象的作用域
        readonly IWebHostEnvironment _webHostEnvironment;


        public UserController(ILogger<UserController> logger, UserDB user)  //在控制器的构造函数中，引入对象--依赖注入
        {
            _logger = logger;

            userDB = user;    //扩大对象的作用域

        }


        public IActionResult Login()  // 如果不写处理方式，默认是get请求  [HttpPost]
        {
            return View();
        }

        /*                                登录界面                         */
        [HttpPost]
        public IActionResult Login(string name, string password)  // 如果不写处理方式，默认是get请求,此时需要一个post请求的，处理交过来的表单信息
        {
            if (name == "admin" && password == "123456")
            {
                ViewBag.Result = "成功！"; // 向界面传值，ViewBag是后台想前端传递数据的袋子，变量随便命名如“Result”
                return RedirectToAction("Index");   // 链接重定向
            }
            else
            {
                ViewBag.Result = "用户名或密码错误！";
            }
            return View();
        }

        /*                            网站首页            */
        public IActionResult Index()  //   学院列表
        {
            // 1.向M要值
            List<User> list_User = userDB.Get_all_User();
            // 2.C把值传给V,V来展示
            ViewBag.Users = list_User;
            return View();
        }



        /*                       转到添加页面                       */
        public IActionResult Add()
        {
            return View();
        }



        ///*                        添加用户信息                   */
        //[HttpPost]
        //public IActionResult Add(User user)  // 类 封装
        //{
        //    //将封装好的User传递给Models，RecipeService类中的Add_Menu()方法


        //    int result = userDB.Add_User(user);
        //    // 接受M的反馈，将反馈结果传递给界面
        //    if (result > 0)
        //    {
        //        return RedirectToAction("Index");
        //    }
        //    else
        //    {
        //        ViewBag.Message = "添加失败！";
        //        return View();
        //    }

        //}
        /*                 照片的上传于下载                                      */

        [HttpPost]
        public async Task<IActionResult> Add(User user, IFormCollection collection)//User是界面form表单传递过来的值
        {
            //int count = 0;
            var files = collection.Files;
            if (files.Count > 0)
            {
                string webPath = _webHostEnvironment.WebRootPath;//获取根目录
                string absolutePath = webPath + "\\uploads";
                string[] fileType = new string[] { ".gif", ".jpg", ".jpeg", ".png" };
                string extension = Path.GetExtension(files[0].FileName);//获取上传文件的扩展名
                if (fileType.Contains(extension))
                {
                    if (!Directory.Exists(absolutePath))
                    {
                        Directory.CreateDirectory(absolutePath);
                    }
                    string fileName = DateTime.Now.ToString("yyyyMMddHHmmss") + extension;
                    string filePath = absolutePath + "\\" + fileName;
                    using (var stream = new FileStream(filePath, FileMode.Create))
                    {
                        await files[0].CopyToAsync(stream);//异步拷贝
                    }

                    user.PhotoPath = fileName;
                    int result = userDB.Add_User(user);
                    //存储传递过来的值
                    //根据返回的结果给用户提示
                    if (result > 0)
                    {
                        return RedirectToAction("Index");
                    }
                    else
                    {
                        ViewBag.Message = "添加失败！";
                        return View();
                    }
                }
                //提示上传文件类型错误
            }

            List<User> list = userDB.Get_all_User();
            ViewBag.R = list;
            return View();
        }







        /*                         先按ID查询菜单                     */
        public IActionResult Edit(int id = 1)  // id代表用户点击的那条记录的主键，这里就是菜谱的编号
        {
            // 1.向M要值
            User user = userDB.Get_User_id(id);
            // 2.C把值传给V,V来展示
            ViewBag.R = user;
            return View();
        }


        ///*                       在按ID修改菜单信息                */
        //[HttpPost]
        //public IActionResult Edit(User user)  // 修改菜单  这里就是菜谱的编号
        //{
        //    //将封装好的User传递给Models，RecipeService类中的Edit_Menu()方法

        //    int result = userDB.Edit_User(user);
        //    // 接受M的反馈，将反馈结果传递给界面
        //    if (result > 0)
        //    {
        //        ViewBag.Message = "修改成功！";
        //    }
        //    else
        //    {
        //        ViewBag.Message = "修改失败！";
        //    }
        //    ViewBag.R = user;
        //    //把菜单(User.cs)存储一下
        //    return RedirectToAction("Index");
        //}


        [HttpPost]
        public async Task<IActionResult> Edit(User user, IFormCollection collection)//修改时，打开界面，界面上就应该显示出对应的值，好让用户进行修改
        {
            int count = 0;
            var files = collection.Files;
            string fileName = "";
            if (files.Count > 0)
            {
                string webPath = _webHostEnvironment.WebRootPath;//获取根目录
                string absolutePath = webPath + "\\uploads";
                string[] fileType = new string[] { ".gif", ".jpg", ".jpeg", ".png" };
                string extension = Path.GetExtension(files[0].FileName);//获取上传文件的扩展名
                if (fileType.Contains(extension))
                {
                    if (!Directory.Exists(absolutePath))
                    {
                        Directory.CreateDirectory(absolutePath);
                    }
                    fileName = DateTime.Now.ToString("yyyyMMddHHmmss") + extension;
                    string filePath = absolutePath + "\\" + fileName;
                    using (var stream = new FileStream(filePath, FileMode.Create))
                    {
                        await files[0].CopyToAsync(stream);//异步拷贝
                    }
                }
                //提示上传文件类型错误
            }
            else fileName = Request.Form["photo"].ToString();
            user.PhotoPath = fileName;
            int result = userDB.Edit_User(user);
            if (result > 0)
                ViewBag.Message = "修改成功";
            else ViewBag.Message = "修改失败";
            ViewBag.R = user;
            return View();
        }







        public IActionResult Detail(int id)   // 显示菜单详情
        {
            // 1.向M要值
            User user = userDB.Get_User_id(id);
            // 2.C把值传给V,V来展示
            ViewBag.User = user;
            return View();  // 创建与Detail控制器相同的页面
        }



        /*                         先按ID删除菜单                     */
        public IActionResult Delete(int id)  // id代表用户点击的那条记录的主键，这里就是菜谱的编号
        {
            // 1.输入要删除的User对象元素的id
            bool result = userDB.Delete(id);
            // 2.C把值传给V,V来展示
            if (result)
            {
                ViewBag.Message = "删除成功！";
            }
            else
            {
                ViewBag.Message = "删除失败！";
            }
            return RedirectToAction("Index");   // 转到Menu这个Action上
        }


    }
}

